package main

import (
	"encoding/json"
	"io/ioutil"
	"log"

	"github.com/fsnotify/fsnotify"
)

func main() {
	go Watcher()
	select {}
}

func LoadFile(path string) {
	m := make(map[string]interface{})
	a, _ := ioutil.ReadFile(path)
	json.Unmarshal(a, &m)
	log.Println("config.json", m)
}

func Watcher() {
	//创建一个监控对象
	watch, err := fsnotify.NewWatcher()
	if err != nil {
		log.Fatal(err)
	}
	defer watch.Close()
	path := "src/job/test/config.json"
	//添加要监控的对象，文件或文件夹
	watch.Add(path)
	//我们另启一个goroutine来处理监控对象的事件
	// go func() {
	for {
		// 文件变动一次会添加两个一样的信号
		// 需要先释放掉一个
		// 为啥会有两个信号，我也不知道
		<-watch.Events
		select {
		case ev := <-watch.Events:
			{
				//判断事件发生的类型，如下5种
				// Create 创建
				// Write 写入
				// Remove 删除
				// Rename 重命名
				// Chmod 修改权限
				// if ev.Op&fsnotify.Create == fsnotify.Create {
				//     log.Println("创建文件 : ", ev.Name)
				// }
				if ev.Op&fsnotify.Write == fsnotify.Write {
					// log.Println("写入文件 : ", ev.Name)
					LoadFile(path)
				}
				// if ev.Op&fsnotify.Remove == fsnotify.Remove {
				//     log.Println("删除文件 : ", ev.Name)
				// }
				// if ev.Op&fsnotify.Rename == fsnotify.Rename {
				//     log.Println("重命名文件 : ", ev.Name)
				// }
				// if ev.Op&fsnotify.Chmod == fsnotify.Chmod {
				//     log.Println("修改权限 : ", ev.Name)
				// }
			}
		case err := <-watch.Errors:
			{
				log.Println("error : ", err)
				return
			}
		}
	}
	// }()
}
